import 'package:flutter/material.dart';

/// **HiddenImeOverlay**
///
/// 一个“隐藏的” [EditableText] 组件，用于：
/// - 接管 **系统输入法 (IME)** 的文本输入能力；
/// - 避免真实文本在屏幕上渲染（通过透明文字+忽略指针实现）；
/// - 与编辑器逻辑配合（例如自绘的代码编辑器）。
///
/// 设计思路：
/// - [EditableText] 是 Flutter 唯一能够和平台 IME 建立通道的部件；
/// - 这里我们把它渲染为“完全透明 + 不可点击”；
/// - 编辑器逻辑通过 [TextEditingController] / [FocusNode] 与其交互，
///   从而在自绘界面下仍能获得系统输入（软键盘、拼写联想、中文候选词等）。
class HiddenImeOverlay extends StatelessWidget {
  const HiddenImeOverlay({
    super.key,
    required this.controller,
    required this.focusNode,
    this.onChanged,
  });

  /// 用于与 IME 同步的 [TextEditingController]。
  /// - 外部应在文本内容变更时读取它；
  /// - 并在用户操作时更新它。
  final TextEditingController controller;

  /// 与编辑器共享的焦点对象。
  /// - 获得焦点时系统键盘弹出；
  /// - 失去焦点时键盘收起。
  final FocusNode focusNode;

  /// 输入文本变更回调（通常用于同步回编辑器核心数据结构）。
  final ValueChanged<String>? onChanged;

  @override
  Widget build(BuildContext context) {
    return IgnorePointer(
      // 忽略指针事件，用户无法直接点击/编辑该控件
      ignoring: true,
      child: EditableText(
        controller: controller,
        focusNode: focusNode,
        maxLines: null, // 支持多行输入
        keyboardType: TextInputType.multiline,
        style: const TextStyle(
          fontSize: 16,
          color: Colors.transparent, // 文字透明，不可见
        ),
        cursorColor: Colors.transparent, // 光标透明
        backgroundCursorColor: Colors.transparent, // 背景光标透明
        textAlign: TextAlign.left,
        scrollPhysics: const NeverScrollableScrollPhysics(), // 不允许滚动
        onChanged: onChanged, // 将 IME 输入反馈给外部
      ),
    );
  }
}
